Вход

Просмотр полной версии : Не могу соедениться с сервером


ureech
22.04.2025, 20:09
Всем привет. На вебсервере(nginx) крутится сайт. На http. Решил сделать чат, типа поддержки. Нарисовал форму,установил nodejs на сервер. В конфиге (nginx) сайта прописал proxy.
location /chat/ {

proxy_pass http://site.ru:3000;
proxy_set_header Host $host;

}
server.js
const http = require('http');
const WebSocket = require('ws');

const wss = new WebSocket.Server({port:3000 });
wss.on('connection', function connection(ws) {

ws.on('message', function incoming(message) {
console.log('Получено сообщение: %s', message);
});

});

client.js

var ws = new WebSocket('ws://site.ru:3000');
или
var ws = new WebSocket('ws://site.ru/chat/');

Нет соединения. Порт открыт. Если просто запускать node server, работает. Нужный порт слушает.

Целый день провозился(.

Nexus
22.04.2025, 21:07
В настройках nginx разве есть смысл указывать доменное имя, если его A-запись все равно указывает на этот же сервер?
Это же бессмысленное обращение к DNS, там можно просто `localhost:3000` или `127.0.0.1:3000` указать.

Если просто запускать node server, работает.
Просто запуска nginx недостаточно, нужно чтобы и nodejs также отрабатывал ваш скрипт, иначе получиться, что nginx перебрасывает запрос, а принять его некому. В этом случае, вроде как, должна падать 502 ошибка - bad gateway.

Aetae
22.04.2025, 21:19
https://nginx.org/en/docs/http/websocket.html

Ну и proxy_pass htt*!**/!*p://localhost:3000

ureech
23.04.2025, 12:29
Да нет,это не влияет. Перенёс чат на другой сайт с https. та же хрень.
Этот код
var https = require('node:https');
var fs = require('node:fs');
const options = {
key:fs.readFileSync('./key.pem'),
cert:fs.readFileSync('./cert.pem')
}

https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(3000);

работает. То есть я открываю страницу https://site.ru/chat и вижу hello world

Но код с websocket ни в какую

const HttpsServer = require('node:https').createServer;
var fs = require('node:fs');
const WebSocket = require('ws').Server;

const options = {
key:fs.readFileSync('./key.pem'),
cert:fs.readFileSync('./cert.pem')
}
const server = HttpsServer({options});
const socket = new WebSocket({
server: server
});

socket.on('connection', (ws) => {
ws.on('message', (message) => {
console.log(`Received: ${message}`);
});
ws.send('Secure connection established!');
});

server.listen(3000);

В nginx вносил правки. Всё равно(

ureech
23.04.2025, 21:23
Разобрался. Нужно было на отдельном поддомене запустить node сервер и потом уже с сайта подключаться к нему.